Okay, lets check out the National Student Clearinghouse enrollment data. I will first import the entire dataset, clean it up, and then merge it with the master / Southern graduate dataset.
nsc.enrollment.original <-read_csv('/Users/kellyasche/Library/CloudStorage/GoogleDrive-kasche@ruralmn.org/My Drive/Research/FY25-27/FY26/OHE Journey to meaningful employment/Data/SLEDS/NSCEnrollment/NSC_Enrollments.csv') %>%mutate(PersonID =as.integer(PersonID),OPEID =str_pad(OPEID, width =8, side ="left", pad ="0"),OPEID.6 =str_sub(OPEID, 1, 6)) %>%drop_na(PersonID) %>%drop_na(OPEID)kable(head(nsc.enrollment.original))
PersonID
EnrollmentBeginTimeID
EnrollmentEndTimeID
OPEID
EnrollmentStatus
OPEID.6
10025234
20120103
20120126
00235400
H
002354
11364693
20130122
20130517
00238881
F
002388
3090532
20090824
20091218
00238300
F
002383
11127041
20200601
20200819
00238200
L
002382
4465956
20100823
20101217
00299700
F
002997
9191392
20110110
20110513
00553400
L
005534
kable(names(nsc.enrollment.original))
x
PersonID
EnrollmentBeginTimeID
EnrollmentEndTimeID
OPEID
EnrollmentStatus
OPEID.6
The dataset has 3,010,265 rows and 6 columns. Here are the columns and their definitions.
EnrollmentBeginTimeID: Begin date for the student’s period of attendance.
EnrollmentEndTimeID: End date for the student’s period of attendance.
OPEID: Office of Postsecondary Education (OPE)/FICE code of the college that the student attended (Foreign Key to IPEDSCharacteristics).
InstitutionName: Name of institution
EnrollmentStatus: The last enrollment status reported for the student. This field will have ‘N/A’ or “NULL” if the reporting college has not defined the student’s enrollment status as directory information. Here are the code definitions;
F: Full-time
Q: Three-quarter time
H: Half-time
L: Less than half-time
A: Leave of absence
W: Withdrawn
D: Deceased
Essentially, this dataset provides semester-based information - each observation is a semester/single period with the institutional information and beginning and end time of that single period (usually a semester). For example, if an individual attended South Dakota State University, attended in a “typical” fashion (fall and spring semesters), and graduated in 4 years, there would be 8 observations for that PersonID - one observation per semester.
There are a few pieces of information that I want to consolidate from this dataset;
Did the PersonID in the master dataset attend a college - yes or no?
Did the PersonID attend college during high school (PSEO), immediately after graduation or wait?
Did the PersonID attend multiple colleges - yes or no?
What type of college did the PersonID attend first?
Did the PersonID attend a public, private not-for-profit, or private or, for-profit college(s)?
At any point during their college career, did the PersonID attend a college(s) inside or outside of the Southwest Region or outside the EDR of their high school?
I was going to include the length of time that a PersonID attended college, but due to differences in how institutions report enrollment periods, it didn’t seem like it would be a great indicator.
The pieces of information missing in the original dataset is location and type of institution attended.To do this we will need to join the original dataset with an IPEDS dataset using opeid.
The IPEDS data and the NSC data will only match using the first 6 digits of the IPEDS OPEID values. So I will change that in the NSC data. Then I can join.
ipeds.original <-read_csv('/Users/kellyasche/Library/CloudStorage/GoogleDrive-kasche@ruralmn.org/My Drive/Research/FY25-27/FY26/OHE Journey to meaningful employment/Data/SLEDS/IPEDS/IPEDS.csv') ipeds.sector <- ipeds.original %>%filter(!is.na(OPEID)) %>%mutate(OPEID =str_pad(OPEID, width =8, side ="left", pad ="0"),OPEID.6 =str_sub(OPEID, 1, 6)) %>%select(Unitid, OPEID.6, City, State, FIPS, GeographicRegion, CountyCode, InstitutionSector, InstitutionName) %>%mutate(CountyCode =str_pad(CountyCode, width =5, side ="left", pad ="0"))nsc.enrollment.ipeds<- nsc.enrollment.original %>%left_join(ipeds.sector, by ="OPEID.6") %>%drop_na(Unitid) %>%mutate(EnrollmentStatus =as_factor(EnrollmentStatus))kable(head(nsc.enrollment.ipeds))
PersonID
EnrollmentBeginTimeID
EnrollmentEndTimeID
OPEID
EnrollmentStatus
OPEID.6
Unitid
City
State
FIPS
GeographicRegion
CountyCode
InstitutionSector
InstitutionName
10025234
20120103
20120126
00235400
H
002354
173665
Saint Paul
MN
27
4
27123
2
Hamline University
11364693
20130122
20130517
00238881
F
002388
174233
Duluth
MN
27
4
27137
1
University of Minnesota-Duluth
3090532
20090824
20091218
00238300
F
002383
174862
Saint Bonifacius
MN
27
4
27019
2
Crown College
11127041
20200601
20200819
00238200
L
002382
174844
Northfield
MN
27
4
27131
2
St Olaf College
4465956
20100823
20101217
00299700
F
002997
200332
Fargo
ND
38
4
38017
1
North Dakota State University-Main Campus
9191392
20110110
20110513
00553400
L
005534
174756
Saint Cloud
MN
27
4
27145
4
St Cloud Technical and Community College
kable(names(nsc.enrollment.ipeds))
x
PersonID
EnrollmentBeginTimeID
EnrollmentEndTimeID
OPEID
EnrollmentStatus
OPEID.6
Unitid
City
State
FIPS
GeographicRegion
CountyCode
InstitutionSector
InstitutionName
After joining these we now have 3,009,843 rows and 14 columns. This is a few less than the original enrollment document due to a few OPEIDs not aligning. But overall, the data now has the institution sector that the individual attended as well as location.
First, we will create a dataset with a column confirming their post-secondary attendance for each unique PersonID in the nsc.enrollment.ipeds.
There are 388,959 rows and 2 columns in the dataset. The columns provide the unique PersonID along with a newly created column confirming that they attended post-secondary education.
Next we will extract the first month and year each PersonID attended a post-secondary institution which will help us figure out how long after high school graduation did they wait until they attended a post-secondary institution.
This dataset has 397,372 rows and 2 columns. Essentially, this dataset provides each unique PersonID with the earliest begin time for post-secondary education.
Next we will determine how many different institiutions the PersonID attended during their post-secondary career.
As expected, we have 397,372 rows and 2 columns. Each PersonID in the dataset has the number of unique post-secondary institutions they attended.
Next, we will create a dataset indicating the type of college the PersonID attended first. I will use the IPEDS sector data. Here are the definitions of the institution sector;
As expected, we have 397,372 rows and 2 columns. This dataset now provides the sector of the first post-secondary institution they attended immediately after college.
Next we will determine thy type(s) of college(s) they attended during their post-secondary career. To do this we will first create a dataset with columns for each institution sector and a confirmation indicator on whether the PersonID attended that particular sector at some point in their career. I will then create a new category indicating that attended more than one type of institution sector. Once completed, I will be left with a dataset that has a column for each unique PersonID and what sector they attended, as well as a newly created code for “attended more than 1 type of sector”.
As expected, we have 122,938 rows and 10 columns. This dataset provides each unique PersonID with the institution sector they attended using the codes listed above. For PersonID’s that attended multiple sectors, they were coded as “10”.
Next we will determine whether they attended a post-secondary institution inside or outside of the planning region, outside their EDR, or outside of Minnesota. Since many of the PersonID in the dataset have attended multiple institutions, we will categorize it in the following way in order to capture the combinations of attendance;
Attended inside region only (planning region, EDR, RUCA, State)
Attended inside and outside region (planning region, EDR, RUCA, state)
Attended outside region only (planning region, EDR, RUCA, state)
In order to do this we will need to combine our planning region and EDR joining documents with the nsc.enrollment.ipeds dataset. I need to remember that the way I arranged the regions are going to be different than the official planning region. We will also need to join the master dataset with it to determine the location of the PersonID’s high school graduation location. Lastly, we will need to join up the RUCA categories for counties outside of Minnesota. Then we can start the categorization process.
This joined dataset gives us 694,684 rows and 11 columns. The columns beginning with “ps” are the ruca category and regions of the post-secondary institution attended. The columns beginning with “grad” are the ruca category and regions of the high school from which the PersonID graduated.
One thing that’s important is to realize that joining the nsc.enrollment dataset with the Southern graduates dataset means we will have some NAs. Some of the students listed in the nsc.enrollment dataset aren’t in the Southern graduates dataset since they may have graduated before 2008 or didn’t actually meet the criteria in the Southern graduates dataset. Therefore, as we move forward, I will need to make sure to remove those NAs.
From here we can start creating new columns beginning with the RUCA category. to create this column we will gather each PersonID to examine whether or they attended a post-secondary institution in the same RUCA category, or if they attended multiple post-secondary institutions with one institution in the same category and another not the same.
nsc.enrollment.same.ruca <- nsc.enrollment.location.join %>%mutate(ps.in.same.ruca =ifelse(ps.Dem_Desc == grad.ruca, "In same RUCA", "Outside RUCA")) %>%select(PersonID, ps.Dem_Desc, grad.ruca, ps.in.same.ruca) %>%select(PersonID, ps.in.same.ruca) %>%distinct(PersonID, ps.in.same.ruca) %>%mutate(code =ifelse(ps.in.same.ruca =="In same RUCA", 1, 2)) %>%group_by(PersonID) %>%summarize(code =sum(code)) %>%ungroup() %>%mutate(ps.in.same.ruca =ifelse(code ==1, "In same RUCA",ifelse(code ==2, "Outside RUCA", "Inside and outside same RUCA"))) %>%select(PersonID, ps.in.same.ruca)kable(head(nsc.enrollment.same.ruca))
PersonID
ps.in.same.ruca
280
In same RUCA
301
Outside RUCA
412
Outside RUCA
513
Outside RUCA
687
Outside RUCA
710
In same RUCA
kable(names(nsc.enrollment.same.ruca))
x
PersonID
ps.in.same.ruca
So there are fewer observations in this dataset than previous subsets. Why? This is due to dropping a PersonID that wasn’t in the Southern graduate dataset. I did not do that for the previous subsets. However, those previous subsets will be filtered down once we join it with the master dataset.
This dataset provides the PersonID and whether they attended a post secondary institution in a location with the same, outside, or both outside and inside (if attended multiple post-secondary institutions) RUCA categories of their high school from which they graduated. There are 90,596 rows and 2 columns.
Up next we will create a dataset indicating whether a PersonID that graduated from a Southern MN high school attended a post-secondary institution in their high school’s EDR.
nsc.enrollment.same.edr <- nsc.enrollment.location.join %>%mutate(ps.in.same.edr =ifelse(ps.edr == grad.edr, "In same EDR", "Outside EDR"),ps.in.same.edr =ifelse(is.na(ps.in.same.edr), "Outside EDR", ps.in.same.edr)) %>%select(PersonID, ps.edr, grad.edr, ps.in.same.edr) %>%select(PersonID, ps.in.same.edr) %>%distinct(PersonID, ps.in.same.edr) %>%mutate(code =ifelse(ps.in.same.edr =="In same EDR", 1, 2)) %>%group_by(PersonID) %>%summarize(code =sum(code)) %>%ungroup() %>%mutate(ps.in.same.edr =ifelse(code ==1, "In same EDR",ifelse(code ==2, "Outside EDR", "Inside and outside same EDR"))) %>%select(PersonID, ps.in.same.edr)kable(head(nsc.enrollment.same.edr))
PersonID
ps.in.same.edr
280
Outside EDR
301
Outside EDR
412
Outside EDR
513
In same EDR
687
Outside EDR
710
Outside EDR
kable(names(nsc.enrollment.same.edr))
x
PersonID
ps.in.same.edr
As expected there are 90,596 rows and 2 columns.
Next we will determine which Southern MN graduates attended a post-secondary institution in the same project region (Southern project region).
nsc.enrollment.same.pr <- nsc.enrollment.location.join %>%mutate(ps.in.same.pr =ifelse(ps.pr == grad.pr, "In same PR", "Outside PR"),ps.in.same.pr =ifelse(is.na(ps.in.same.pr), "Outside PR", ps.in.same.pr)) %>%select(PersonID, ps.pr, grad.pr, ps.in.same.pr) %>%select(PersonID, ps.in.same.pr) %>%distinct(PersonID, ps.in.same.pr) %>%mutate(code =ifelse(ps.in.same.pr =="In same PR", 1, 2)) %>%group_by(PersonID) %>%summarize(code =sum(code)) %>%ungroup() %>%mutate(ps.in.same.pr =ifelse(code ==1, "In same PR",ifelse(code ==2, "Outside PR", "Inside and outside same PR"))) %>%select(PersonID, ps.in.same.pr)kable(head(nsc.enrollment.same.pr))
PersonID
ps.in.same.pr
280
Outside PR
301
Outside PR
412
In same PR
513
In same PR
687
Outside PR
710
Outside PR
kable(names(nsc.enrollment.same.pr))
x
PersonID
ps.in.same.pr
As expected, there are 90,596 rows and 2 columns. This dataset provides whether the post-secondary institution(s) attended were in the same planning region as the high school from which they graduates, outside of the planning region, or both (attended multiple institutions).
Next we want to see how many of the students leave the state to attend post-secondary education.
As expected we have 90,596 rows and 2 columns. This dataset provides each distinct PersonID with whether they attended post secondary institutions inside MN, outside MN, or both.
Okay, now it’s time to join all of these with the master dataset. I will also create a new column that confirms whether they attended a college immediately (within the first year) after graduating high school.
master <-read_csv("Data/SLEDS/Masters/Master-8.csv") %>%mutate(PersonID =as.numeric(PersonID)) master.9<- master %>%left_join(nsc.enrollment.confirm, by ="PersonID") %>%mutate(attended.ps =ifelse(is.na(attended.ps), "No", attended.ps)) %>%left_join(nsc.enrollment.first.attend, by ="PersonID") %>%mutate(attended.ps.first.year =as.integer(str_sub(first.attend.ps, 1, 4)),attended.ps.years.hsgrad = attended.ps.first.year - grad.year,attended.ps.within.first.year.hsgrad =ifelse(attended.ps.years.hsgrad <2, "Yes", "No")) %>%left_join(nsc.enrollment.n.institutions, by ="PersonID") %>%left_join(nsc.enrollment.first.institution, by ="PersonID") %>%left_join(nsc.enrollment.institution.types, by ="PersonID") %>%left_join(nsc.enrollment.same.ruca, by ="PersonID") %>%left_join(nsc.enrollment.same.edr, by ="PersonID") %>%left_join(nsc.enrollment.same.pr, by ="PersonID") %>%left_join(nsc.enrollment.in.MN, by ="PersonID") %>%mutate(n.institutions =ifelse(is.na(n.institutions), 0, n.institutions),attended.ps.years.hsgrad =ifelse(attended.ps.years.hsgrad ==-14, -1, attended.ps.years.hsgrad),Dem_Desc =fct_relevel(Dem_Desc, "Town/rural mix", "Urban/town/rural mix", "Entirely urban"))nscenrollment.master <-read_csv("Data/SLEDS/Masters/Master-1.csv") %>%select(PersonID, grad.year) %>%left_join(nsc.enrollment.confirm, by ="PersonID") %>%mutate(attended.ps =ifelse(is.na(attended.ps), "No", attended.ps)) %>%left_join(nsc.enrollment.first.attend, by ="PersonID") %>%mutate(attended.ps.first.year =as.integer(str_sub(first.attend.ps, 1, 4)),attended.ps.years.hsgrad = attended.ps.first.year - grad.year,attended.ps.within.first.year.hsgrad =ifelse(attended.ps.years.hsgrad <2, "Yes", "No")) %>%left_join(nsc.enrollment.n.institutions, by ="PersonID") %>%left_join(nsc.enrollment.first.institution, by ="PersonID") %>%left_join(nsc.enrollment.institution.types, by ="PersonID") %>%left_join(nsc.enrollment.same.ruca, by ="PersonID") %>%left_join(nsc.enrollment.same.edr, by ="PersonID") %>%left_join(nsc.enrollment.same.pr, by ="PersonID") %>%left_join(nsc.enrollment.in.MN, by ="PersonID") %>%mutate(n.institutions =ifelse(is.na(n.institutions), 0, n.institutions)) %>%select(-grad.year) write_csv(nscenrollment.master, "Data/SLEDS/Masters/nscenrollment_master.csv")kable(head(master.9))
PersonID
K12OrganizationID
OrganizationName
county.name
countyfp
Dem_Desc
edr
grad.year
grad.year.covid
Gender
LimitedEnglishProficiencyIndicator
HomelessIndicator
economic.status
pseo.participant
SpecialEdStatus
non.english.home
RaceEthnicity
n.years.attended
ACTCompositeScore
ap.exam
total.cte.courses.taken
ACTE-SPED
Agriculture, Food, and Natural Resources
Architecture & Construction
Arts, A/V Technology & Communication
Business, Management & Administrative
Diversified
Education & Training
Finance
Government & Public Administration
Health Science
Hospitality & Tourism
Human Services
Information Technology
Law, Public Safety & Security
Manufacturing
Marketing
Program Area (Diversified)
Science, Technology, Engineering, & Mathematics
STEM
Transportation, Distribution & Logistics
Work Experience-Handicapped
Work Experience-Handicapped (16-20+ on IEP)
Work Experience/Career Exploration (age 14-15 on I
Work-Experience-Disadvantaged
Youth Apprenticeship
cte.achievement
english.learner
MCA.M
MCA.R
MCA.S
sat.taken
attended.ps
first.attend.ps
attended.ps.first.year
attended.ps.years.hsgrad
attended.ps.within.first.year.hsgrad
n.institutions
first.InstitutionSector
ps.sector.1
ps.sector.2
ps.sector.3
ps.sector.4
ps.sector.5
ps.sector.6
ps.sector.7
ps.sector.8
ps.sector.9
ps.in.same.ruca
ps.in.same.edr
ps.in.same.pr
ps.in.MN
7699638
29705
FILLMORE CENTRAL SENIOR HIGH
Fillmore
045
Urban/town/rural mix
EDR 10 - Southeast
2015
Pre-covid grad
M
N
N
0
1
0
0
White
3
19
0
2
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
CTE Participant
0
3
4
3
0
Yes
20150824
2015
0
Yes
3
1
1
0
0
1
0
0
0
0
0
Inside and outside same RUCA
Inside and outside same EDR
Inside and outside same PR
Inside and outside MN
2225025
132298
MAYO SENIOR HIGH
Olmsted
109
Entirely urban
EDR 10 - Southeast
2017
Pre-covid grad
M
N
N
0
0
0
0
White
3
29
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
No CTE
0
4
4
4
1
Yes
20170905
2017
0
Yes
1
1
1
0
0
0
0
0
0
0
0
In same RUCA
Outside EDR
Outside PR
In MN
10400093
62
Cannon Falls Secondary
Goodhue
049
Urban/town/rural mix
EDR 10 - Southeast
2014
Pre-covid grad
F
N
N
0
1
0
0
White
3
20
1
2
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
CTE Participant
0
4
4
3
0
Yes
20140825
2014
0
Yes
2
4
0
1
0
1
0
0
0
0
0
In same RUCA
Outside EDR
Outside PR
In MN
8786746
128661
LINCOLN SECONDARY
Wabasha
157
Urban/town/rural mix
EDR 10 - Southeast
2014
Pre-covid grad
F
N
N
0
1
0
0
White
3
24
1
2
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
CTE Participant
0
4
4
3
0
Yes
20140902
2014
0
Yes
1
2
0
1
0
0
0
0
0
0
0
In same RUCA
Outside EDR
In same PR
In MN
11122574
109999
AUSTIN SENIOR HIGH
Mower
099
Urban/town/rural mix
EDR 10 - Southeast
2011
Pre-covid grad
F
N
N
0
1
0
0
White
3
19
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
No CTE
0
3
4
3
0
Yes
20110822
2011
0
Yes
2
4
1
0
0
1
0
0
0
0
0
In same RUCA
Inside and outside same EDR
Inside and outside same PR
In MN
10181573
155484
CHATFIELD SECONDARY
Olmsted
109
Entirely urban
EDR 10 - Southeast
2010
Pre-covid grad
M
N
N
0
NA
0
0
White
3
33
1
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
CTE Participant
0
4
4
4
0
Yes
20120827
2012
2
No
2
4
1
0
0
1
0
0
0
0
0
In same RUCA
Outside EDR
Outside PR
In MN
kable(names(master.9))
x
PersonID
K12OrganizationID
OrganizationName
county.name
countyfp
Dem_Desc
edr
grad.year
grad.year.covid
Gender
LimitedEnglishProficiencyIndicator
HomelessIndicator
economic.status
pseo.participant
SpecialEdStatus
non.english.home
RaceEthnicity
n.years.attended
ACTCompositeScore
ap.exam
total.cte.courses.taken
ACTE-SPED
Agriculture, Food, and Natural Resources
Architecture & Construction
Arts, A/V Technology & Communication
Business, Management & Administrative
Diversified
Education & Training
Finance
Government & Public Administration
Health Science
Hospitality & Tourism
Human Services
Information Technology
Law, Public Safety & Security
Manufacturing
Marketing
Program Area (Diversified)
Science, Technology, Engineering, & Mathematics
STEM
Transportation, Distribution & Logistics
Work Experience-Handicapped
Work Experience-Handicapped (16-20+ on IEP)
Work Experience/Career Exploration (age 14-15 on I
Work-Experience-Disadvantaged
Youth Apprenticeship
cte.achievement
english.learner
MCA.M
MCA.R
MCA.S
sat.taken
attended.ps
first.attend.ps
attended.ps.first.year
attended.ps.years.hsgrad
attended.ps.within.first.year.hsgrad
n.institutions
first.InstitutionSector
ps.sector.1
ps.sector.2
ps.sector.3
ps.sector.4
ps.sector.5
ps.sector.6
ps.sector.7
ps.sector.8
ps.sector.9
ps.in.same.ruca
ps.in.same.edr
ps.in.same.pr
ps.in.MN
As expected, we have the same number of rows as the original master dataset - 122,938 rows. Here are the explanations of all the new columns added to the master dataset.
attended.ps - this is a confirmation that the PersonID attended a post-secondary institution at some point after graduating high school.
attended.ps.years.hsgrad - the number of years after graduation that a PersonID attended a post-secondary education. In some cases, the value is negative indicating that the PersonID attended a post-secondary institution before graduating high school.
attended.ps.within.first.year.hsgrad - did the PersonID attend a post-secondary education institution within 1 year or less from graduating high school.
n.institutions - how many post-secondary institutions the PersonID attended
first.InstitutionSector - the sector of the first post-secondary institution attended.
InstitutionSector - The sector of the post-secondary institution attended (could be multiple)
ps.in.same.ruca - did the PersonID attend a post-secondary institution in the same RUCA category as their high school
ps.in.same.edr - did the PersonID attend a post-secondary institution in the same economic development region as high school
ps.in.same.pr - did the PersonID attend a post-secondary institution in the same planning region as high school
ps.in.MN = did the PersonID attend a post-secondary institution in Minnesota.
Summary of students attending post-secondary
Lets summarize the percentage of students that attended a post-secondary institution and compare across RUCA categories.
Below is the percentage of students that attended a post-secondary institution from the entire dataset. 72% of the PersonIDs in the dataset attended a post-secondary institution at some point between 2007 and 2024.
Now lets check to see if this percentage is statistically significantly different by RUCA group.
The crosstabs do indicate that there is a statistically significant difference in the percentage of graduates that attend a post-secondary institution by high school RUCA category. Entirely urban districts have the highest percentage of graduates attend a post-secondary institution - 75% compared to 70% for the other RUCA categories.
Summary of years between graduation and attending post-secondary
Now lets take a look at the number of years between high school graduation and attending post-secondary. We will begin with the total number of students before diving into differences across RUCA categories and regions.
A huge majority of students that attended a post secondary institution waited less than 1 year after graduating high school (87%)
years.between.grad.ps.dist.total <- master.9%>%filter(attended.ps =="Yes") %>%mutate(attended.ps.years.hsgrad.bins =cut(attended.ps.years.hsgrad,breaks =c(-1.1, .1, 1, 2, 3, 100),labels =c("Less than one year", "1 year", "2 years", "3 years", "4 years or more")),data_id =as.character(seq(n()))) %>%group_by(attended.ps.years.hsgrad.bins) %>%summarize(n =n()) %>%ungroup() %>%mutate(pct = n /sum(n),data_id =as.character(seq(n())))years.between.grad.ps.dist.total.plot <-ggplot(years.between.grad.ps.dist.total, aes(attended.ps.years.hsgrad.bins, pct)) +geom_col_interactive(aes(data_id = data_id, tooltip =paste("\nNumber of years between high school graduation and attending post secondary: ", attended.ps.years.hsgrad.bins, "\nNumber of students: ", comma(n, accuracy =1), "\nPercent of students: ", percent(pct, accuracy = .1), sep =""))) +geom_label(aes(label =percent(pct, accuracy = .1)), show.legend =FALSE, color ="black", size =5) +labs(x="", y ="", color="", title ="Percent of students and the number of years between high school and attending post secondary")+scale_y_continuous(labels=scales::percent)+scale_x_discrete(guide =guide_axis(n.dodge =1)) + theme_bar+theme(legend.position ="none",text =element_text(size =16),axis.text.x =element_text(angle =25, hjust = .9))girafe(ggobj = years.between.grad.ps.dist.total.plot) %>%girafe_options(opts_selection(type ="none"),opts_sizing(rescale =FALSE))
Summary of number of colleges attended
Next we will summarize the number of colleges attended by producing the summary statistics and distribution.
The table and distribution chart below show that a large majority (60%) of individuals attended only one post secondary institutions followed by 27.4% attending two.
n.colleges.dist.total <- master.9%>%filter(attended.ps =="Yes") %>%mutate(n.institutions.bins =cut(n.institutions,breaks =c(0, 1, 2, 3, 4, 20),labels =c("One", "Two", "Three", "Four", "More than 4"))) %>%group_by(n.institutions) %>%summarise(n =n()) %>%ungroup() %>%mutate(pct = n /sum(n),data_id =as.character(seq(n())))n.colleges.dist.total.plot <-ggplot(n.colleges.dist.total, aes(n.institutions, pct)) +geom_col_interactive(aes(data_id = data_id, tooltip =paste("Number of institutions attended: ", comma(n.institutions, accuracy =1), "\nNumber of students: ", comma(n, accuracy =1), "\nPercent of students: ", percent(pct, accuracy = .1), sep =""))) +geom_label(aes(label =percent(pct, accuracy = .1)), show.legend =FALSE, color ="black", size =5) +labs(x="", y ="", color="", title ="Percent of students by number of post secondary institutions attended")+scale_y_continuous(labels=scales::percent)+ theme_bar+theme(legend.position ="none",text =element_text(size =16))girafe(ggobj = n.colleges.dist.total.plot) %>%girafe_options(opts_selection(type ="none"),opts_sizing(rescale =FALSE))
I’m not sure it’s all that important knowing whether there are differences in the percentage of students and the number of institutions they’ve attended across RUCA categories or regions. So we will skip that analysis for now.
Summary of types of first college attended
I think this will be very interesting - we want to see what they breakdown is of students attending different types of colleges. We will start by summarizing the total dataset before looking at differences across RUCA categories and regions.
The chart below provides the percentage of students in the entire dataset that attended each institution sector. By far, a huge majority attend either a public 4-year (44%) or public 2-year (38%).
sectors <-read_xlsx('/Users/kellyasche/Library/CloudStorage/GoogleDrive-kasche@ruralmn.org/My Drive/Research/FY25-27/FY26/OHE Journey to meaningful employment/Data/SLEDS/NSC/IPEDS/institution-sectors.xlsx')college.type.summary.total <- master.9%>%filter(attended.ps =="Yes") %>%group_by(first.InstitutionSector) %>%summarize(n =n()) %>%ungroup() %>%mutate(pct = n /sum(n)) %>%left_join(sectors, by =c("first.InstitutionSector"="Code")) %>%mutate(data_id =as.character(seq(n())))college.type.summary.total.plot <-ggplot(college.type.summary.total, aes(x =fct_rev(fct_reorder(Sector, pct)), pct)) +geom_col_interactive(aes(data_id = data_id, tooltip =paste("College sector: ", Sector, "\nNumber of students in college sector: ", comma(n, accuracy =1), "\nPercent of students in college sector: ", percent(pct, accuracy = .1), sep =""))) +geom_label(aes(label =percent(pct, accuracy = .1)), show.legend =FALSE, color ="black", size =5) +labs(x="", y ="", color="", title ="Percent of students first college sector")+scale_y_continuous(labels=scales::percent)+scale_x_discrete(guide =guide_axis(n.dodge =1)) + theme_bar+theme(legend.position ="none",text =element_text(size =18),axis.text.x =element_text(angle =45, hjust =1))girafe(ggobj = college.type.summary.total.plot, width_svg =10, height_svg =6) %>%girafe_options(opts_selection(type ="none"),opts_sizing(rescale =FALSE))
Next we will check to see if those percentages are significantly different by RUCA category of the graduates high school.
The crosstabs indicate that there is a significant difference in the percentage of students attending different institution sectors depending on the RUCA category of their high school. The p-value was near zero.
The primary difference is the graduates from town/rural mix districts attend 2-year colleges at a higher percentage and attend public, 4-year colleges at a lower level.
Next we will check to see if those percentages are significantly different by EDR of the graduates high school.
The crosstabs indicate that there is a significant difference in the percentage of students attending different institution sectors depending on the EDR of their high school. The p-value was near zero.
The biggest difference is that EDR 9 attends 4-year public institution at a much higher rate while attending a 2-year public at a much lower rate. EDR 10 was the opposite.
Summary of attending college with same RUCA category
Up next is determining how many students attended a post-secondary institution located in a county with the same RUCA category as their high school. First we will look at the percentages of the total dataset and then we will break it up.
The chart below shows that 37% of students graduating from a Southern MN high school attended a post secondary institution that was located in a county with the same RUCA category as their high school.
ps.same.ruca.total <- master.9%>%filter(attended.ps =="Yes") %>%group_by(ps.in.same.ruca) %>%summarize(n =n()) %>%ungroup() %>%mutate(pct = n /sum(n),data_id =as.character(seq(n())))ps.same.ruca.total.plot <-ggplot(ps.same.ruca.total, aes(fct_rev(fct_reorder(ps.in.same.ruca, pct)), pct)) +geom_col_interactive(aes(data_id = data_id, tooltip =paste("Location of post-secondary institution: ", ps.in.same.ruca, "\nNumber of students: ", comma(n, accuracy =1), "\nPercent of students: ", percent(pct, accuracy = .1), sep =""))) +geom_label(aes(label =percent(pct, accuracy = .1)), show.legend =FALSE, color ="black", size =5) +labs(x="", y ="", color="", title ="Percent of students attending post secondary in RUCA category")+scale_y_continuous(labels=scales::percent)+scale_x_discrete(guide =guide_axis(n.dodge =1)) + theme_bar+theme(legend.position ="none",text =element_text(size =18))girafe(ggobj = ps.same.ruca.total.plot, width_svg =10, height_svg =6) %>%girafe_options(opts_selection(type ="none"),opts_sizing(rescale =FALSE))
Next, lets check to see if the type of RUCA category they graduated from is related to whether the college they attend is in the same or different RUCA category.
The crosstabs indicate that there is a relationship in the location of the individuals high school graduation and the RUCA category of their post-secondary institution(s). The p-value was 0.
A significantly higher percentage of town/rural mix graduates attended a post-secondary institution outside their RUCA category.
Cell Contents
|-------------------------|
| N |
| Expected N |
| N / Row Total |
|-------------------------|
Total Observations in Table: 88868
| ps.same.ruca.ct.ruca$ps.in.same.ruca
ps.same.ruca.ct.ruca$Dem_Desc | In same RUCA | Inside and outside same RUCA | Outside RUCA | Row Total |
------------------------------|------------------------------|------------------------------|------------------------------|------------------------------|
Town/rural mix | 2338 | 1986 | 11477 | 15801 |
| 5793.712 | 3565.840 | 6441.448 | |
| 0.148 | 0.126 | 0.726 | 0.178 |
------------------------------|------------------------------|------------------------------|------------------------------|------------------------------|
Urban/town/rural mix | 18267 | 9940 | 13614 | 41821 |
| 15334.398 | 9437.820 | 17048.782 | |
| 0.437 | 0.238 | 0.326 | 0.471 |
------------------------------|------------------------------|------------------------------|------------------------------|------------------------------|
Entirely urban | 11980 | 8129 | 11137 | 31246 |
| 11456.890 | 7051.341 | 12737.769 | |
| 0.383 | 0.260 | 0.356 | 0.352 |
------------------------------|------------------------------|------------------------------|------------------------------|------------------------------|
Column Total | 32585 | 20055 | 36228 | 88868 |
------------------------------|------------------------------|------------------------------|------------------------------|------------------------------|
Statistics for All Table Factors
Pearson's Chi-squared test
------------------------------------------------------------
Chi^2 = 8366.953 d.f. = 4 p = 0
Next, lets check to see if the EDR they graduated from is related to whether the college they attend is in the same or different EDR.
The crosstabs indicate that there is a relationship in the location of the individuals high school graduation and the EDR their post-secondary institution(s). The p-value was 0.
Cell Contents
|-------------------------|
| N |
| Expected N |
| N / Row Total |
|-------------------------|
Total Observations in Table: 88875
| ps.same.ruca.ct.edr$ps.in.same.edr
ps.same.ruca.ct.edr$edr | In same EDR | Inside and outside same EDR | Outside EDR | Row Total |
------------------------|-----------------------------|-----------------------------|-----------------------------|-----------------------------|
EDR 10 - Southeast | 17127 | 12207 | 34036 | 63370 |
| 17623.812 | 12196.274 | 33549.914 | |
| 0.270 | 0.193 | 0.537 | 0.713 |
------------------------|-----------------------------|-----------------------------|-----------------------------|-----------------------------|
EDR 9 - South Central | 7590 | 4898 | 13017 | 25505 |
| 7093.188 | 4908.726 | 13503.086 | |
| 0.298 | 0.192 | 0.510 | 0.287 |
------------------------|-----------------------------|-----------------------------|-----------------------------|-----------------------------|
Column Total | 24717 | 17105 | 47053 | 88875 |
------------------------|-----------------------------|-----------------------------|-----------------------------|-----------------------------|
Statistics for All Table Factors
Pearson's Chi-squared test
------------------------------------------------------------
Chi^2 = 73.37579 d.f. = 2 p = 1.165866e-16
Summary of attending college in same planning region as high school
Now we want to see how many students attend a college that is located in the same planning region as their high school.
The chart below shows that nearly 45% of students graduating from Southern MN High schools leave the region to attend post secondary education.
ps.same.pr.total <- master.9%>%filter(attended.ps =="Yes") %>%group_by(ps.in.same.pr) %>%summarize(n =n()) %>%ungroup() %>%mutate(pct = n /sum(n),data_id =as.character(seq(n())))ps.same.pr.total.plot <-ggplot(ps.same.pr.total, aes(fct_rev(fct_reorder(ps.in.same.pr, pct)), pct)) +geom_col_interactive(aes(data_id = data_id, tooltip =paste("College planning region location: ", ps.in.same.pr, "\nNumber of students: ", comma(n, accuracy =1), "\nPercent of students: ", percent(pct, accuracy = .1), sep =""))) +geom_label(aes(label =percent(pct, accuracy = .1)), show.legend =FALSE, color ="black", size =5) +labs(x="", y ="", color="", title ="Percent of students attending college within\nsame planning region")+scale_y_continuous(labels=scales::percent)+ theme_bar+theme(legend.position ="none",text =element_text(size =16),axis.text.x =element_text(angle =25, hjust = .9))girafe(ggobj = ps.same.pr.total.plot) %>%girafe_options(opts_selection(type ="none"),opts_sizing(rescale =FALSE))
Summary of attending college in Minnesota
Now we want to see how many students stay or leave Minnesota to attend college.
The chart below shows that 62% of students graduating from Southern MN high schools attend a post secondary institution in Minnesota.
ps.in.MN.total <- master.9%>%filter(attended.ps =="Yes") %>%group_by(ps.in.MN) %>%summarize(n =n()) %>%ungroup() %>%mutate(pct = n /sum(n),data_id =as.character(seq(n())))ps.in.MN.total.plot <-ggplot(ps.in.MN.total, aes(fct_rev(fct_reorder(ps.in.MN, pct)), pct)) +geom_col_interactive(aes(data_id = data_id, tooltip =paste("College planning region location: ", ps.in.MN, "\nNumber of students: ", comma(n, accuracy =1), "\nPercent of students: ", percent(pct, accuracy = .1), sep =""))) +geom_label(aes(label =percent(pct, accuracy = .1)), show.legend =FALSE, color ="black", size =5) +labs(x="", y ="", color="", title ="Percent of students attending college in\nMinnesota")+scale_y_continuous(labels=scales::percent)+scale_x_discrete(guide =guide_axis(n.dodge =1)) + theme_bar+theme(legend.position ="none",text =element_text(size =16),axis.text.x =element_text(angle =25, hjust = .9))girafe(ggobj = ps.in.MN.total.plot) %>%girafe_options(opts_selection(type ="none"),opts_sizing(rescale =FALSE))
Next, lets check to see if the RUCA category of their high school is related to whether they attend a college inside or outside Minnesota.
The crosstabs below indicate that there is a relationship between the RUCA category of a student’s high school and whether they attend a college inside or outside of Minnesota. The p-value was near zero.
Next, lets check to see if the EDR of their high school is related to whether they attend a college inside or outside Minnesota.
The crosstabs below indicate that there is a relationship between the EDR category of a student’s high school and whether they attend a college inside or outside of Minnesota. The p-value was near zero.
EDR 9 has a signifcantly higher percentage of graduates attend college in Minnesota. EDR 9 had 67% of their graduates attend college in Minnesota while 60% of EDR 10 attended in Minnesota.